package client;


import java.io.BufferedReader;
import java.io.InputStreamReader;

import javax.naming.NamingException;

public class ClientConsole {

	public static void main(String[] args) {

		ClientNode c = new ClientNode();
		boolean joined = false;
		TwoValueTuple t = null;
		c.init(args[0],args[1],args[2]);
		while (true) {
			System.out.println("");
			System.out.println("Selezionare tra le possibili scelte l' operazione che si vuole eseguire");
			if (joined == false) {
				System.out.println("-->1. Creare una federazione");
				System.out.println("-->2. Entrare in una federazione");
			}
			System.out.println("-->3. Ricercare una tupla desiderata");
			System.out.println("-->4. Scrivere una tupla nel tuple space");
			System.out.println("-->5. Lasciare una federazione");
			System.out.println("-->6. Stampa contenuto Tuple Space locale");
			System.out.println("-->7. Esci dall' applicazione");
			System.out.println("Selezionare una operazione:");
			BufferedReader variabile = new BufferedReader(
					new InputStreamReader(System.in));
			int scelta;
			try {
				scelta = Integer.parseInt(variabile.readLine());

				switch (scelta) {
				case 1:
					System.out.println("Immettere il nome di una federazione da creare: ");
					c.create(variabile.readLine());
					joined = true;
					break;
				case 2:
					System.out.println("Inserire il nome di una federazione alla quale si vuole agganciarsi: ");
					try{
						c.join(variabile.readLine());
						joined = true;
					} catch (NamingException e){
						System.out.println("FEDERAZIONE NON PRESENTE");
						joined = false;
					}
					break;
				case 3:
					System.out.println("Inserire il primo valore:");
					t = new TwoValueTuple();
					t.setVal1(variabile.readLine());
					System.out.println("Inserire il secondo valore:");
					t.setVal2(variabile.readLine());
					System.out.println("Scegliere una operazione di ricerca (r per \"read\" i per \"in\"):");
					String op = variabile.readLine();
					if (op.equals("r")){
						c.read(t);
					} else {
						if(op.equals("i")){
							c.in(t);
						}
					}

					break;
				case 4:
					System.out.println("Inserire il primo valore:");
					t = new TwoValueTuple();
					String s = variabile.readLine();
					if (s.equals("")){
						System.out.println("Impossibile inserire un valore vuoto");
						break;
					}
					t.setVal1(s);
					System.out.println("Inserire il secondo valore:");
					s = variabile.readLine();
					if (s.equals("")){
						System.out.println("Impossibile inserire un valore vuoto");
						break;
					}
					t.setVal2(s);
					c.out(t);
					break;
				case 5:
					c.leave();
					joined = false;
					break;
				case 6:
					c.stampaTupleSpace();
					break;
				case 7:
					c.writeVector();
					System.exit(0);
					break;
				default:
					break;
				}
			} catch (Exception e) {

			}

		}

	}
}
